Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cli setup command #3384

Merged
merged 17 commits into from
Mar 13, 2024
Merged

Cli setup command #3384

merged 17 commits into from
Mar 13, 2024

Conversation

anbraten
Copy link
Member

@anbraten anbraten commented Feb 13, 2024

This PR adds a new cli command setup. It is also automatically invoked on the first start of the cli if no server-url is provided. Setup prompts the user to enter a server url and afterwards opens a browser to <url-of-ui>/cli/auth where the user can login or abort the login to the cli.

image

image

@anbraten anbraten added feature add new functionality cli labels Feb 13, 2024
@anbraten anbraten marked this pull request as draft February 13, 2024 13:57
@anbraten anbraten mentioned this pull request Feb 13, 2024
28 tasks
@woodpecker-bot
Copy link
Collaborator

woodpecker-bot commented Feb 13, 2024

Deployment of preview was torn down

Copy link

codecov bot commented Feb 13, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 35.98%. Comparing base (632c946) to head (615e31b).
Report is 7 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #3384      +/-   ##
==========================================
+ Coverage   35.95%   35.98%   +0.03%     
==========================================
  Files         229      229              
  Lines       15464    15464              
==========================================
+ Hits         5560     5565       +5     
+ Misses       9496     9491       -5     
  Partials      408      408              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@xoxys
Copy link
Member

xoxys commented Feb 13, 2024

The server token is stored in clear text in a local file, right? Is this really a good idea at all and even make it simpler for users?

@xoxys
Copy link
Member

xoxys commented Feb 15, 2024

For a possible solution, you might want to take a look at https://docs.docker.com/engine/reference/commandline/login/#credential-stores and/or https://docs.docker.com/engine/reference/commandline/login/#credential-helper-protocol

However, I'm still against implementing a solution that stores secrets unencrypted.

@anbraten
Copy link
Member Author

anbraten commented Feb 15, 2024

The server token is stored in clear text in a local file, right? Is this really a good idea at all and even make it simpler for users?

Considering that most widely used tools like ssh keys, kubeconfig, docker-registry credentials normally follow a similar approach you can still use the cli without if you prefer. For the UX its a complete difference IMO. Having to run sth like export WOODPECKER_TOKEN=... each time you open a new shell is just annoying for daily usage.

@xoxys
Copy link
Member

xoxys commented Feb 15, 2024

SSH keys can use a password that is stored encrypted in the OS trust store and required to unlock the key. Docker registry logins can also use credential helpers to store in the OS trust store, as described in the links I have posted... That's exactly my point, there are better solutions available while improving the UX.

@anbraten
Copy link
Member Author

I had a look at some other clis. Github cli seems to use https://github.com/zalando/go-keyring as implemented in cli/cli#7043

@anbraten anbraten marked this pull request as ready for review February 25, 2024 06:22
@anbraten anbraten requested a review from a team February 25, 2024 06:22
@qwerty287
Copy link
Contributor

Is the screenshot still up-to-date? If yes, I think this page looks a bug ugly as it's that empty. Could we make it similar to the web ui login?

@anbraten
Copy link
Member Author

Is the screenshot still up-to-date? If yes, I think this page looks a bug ugly as it's that empty. Could we make it similar to the web ui login?

I just increased the text sizes in the meanwhile a bit. Wouldn't use the login page actually, as I think it is quite helpful to see the user currently being logged in. I tried a few things like adding the logo in the middle, the logo with a green checkmark / red cross corresponding if you allowed or denied, but that looked a bit weird as well.

@qwerty287
Copy link
Contributor

Can you post a screenshot of how it looks now?

@anbraten
Copy link
Member Author

This is how it currently looks like:

image

Some variants I've tried:

image

image

@qwerty287 qwerty287 added this to the 2.4.0 milestone Feb 26, 2024
cli/setup/token_fetcher.go Outdated Show resolved Hide resolved
cli/setup/setup.go Outdated Show resolved Hide resolved
cli/internal/config/config.go Outdated Show resolved Hide resolved
cli/setup/token_fetcher.go Outdated Show resolved Hide resolved
@anbraten anbraten requested a review from a team March 13, 2024 07:12
@anbraten anbraten merged commit 03c891e into woodpecker-ci:main Mar 13, 2024
9 checks passed
@anbraten anbraten deleted the cli-setup branch March 13, 2024 10:08
@woodpecker-bot woodpecker-bot mentioned this pull request Mar 12, 2024
1 task
@6543
Copy link
Member

6543 commented Mar 18, 2024

-> #3499

anbraten added a commit that referenced this pull request Mar 19, 2024
## [2.4.0](https://github.com/woodpecker-ci/woodpecker/releases/tag/2.4.0) - 2024-03-19

### 🔒 Security

- Improve security context handling
[[#3482](#3482)]
- fix(deps): update module github.com/moby/moby to v24.0.9+incompatible
[[#3323](#3323)]

### ✨ Features

- Cli setup command
[[#3384](#3384)]
- Add bitbucket datacenter (server) support
[[#2503](#2503)]
- Cli updater
[[#3382](#3382)]

### 📚 Documentation

- Delete docs for v0.15.x
[[#3508](#3508)]
- Add deployment plugin
[[#3495](#3495)]
- Bump follow-redirects and fix broken anchors
[[#3488](#3488)]
- fix: plugin doc page not found
[[#3480](#3480)]
- Documentation improvements
[[#3376](#3376)]
- fix(deps): update docs npm deps non-major
[[#3455](#3455)]
- Add "Sonatype Nexus" plugin
[[#3446](#3446)]
- Add blog post
[[#3439](#3439)]
- Add "Gradle Wrapper Validation" plugin
[[#3435](#3435)]
- Add blog post
[[#3410](#3410)]
- Extend core ideas documentation
[[#3405](#3405)]
- docs: fix contributions link
[[#3363](#3363)]
- Update/fix some docs
[[#3359](#3359)]
- chore(deps): update dependency marked to v12
[[#3325](#3325)]

### 🐛 Bug Fixes

- Fix skip setup for some general cli commands
[[#3498](#3498)]
- Move generic agent flags to cmd/agent/core
[[#3484](#3484)]
- Fix usage of WOODPECKER_DATABASE_DATASOURCE_FILE
[[#3404](#3404)]
- Set pull-request id and labels on pr-closed event
[[#3442](#3442)]
- Update org name on login
[[#3409](#3409)]
- Do not alter secret key upper-/lowercase
[[#3375](#3375)]
- fix: can't run multiple services on k8s
[[#3395](#3395)]
- Fix agent polling
[[#3378](#3378)]
- Remove empty strings from slice before parsing agent config
[[#3387](#3387)]
- Set correct link for commit
[[#3368](#3368)]
- Fix schema links
[[#3369](#3369)]
- Fix correctly handle gitlab pr closed events
[[#3362](#3362)]
- fix: update schema event_enum to remove error warning when.event
[[#3357](#3357)]
- Fix version check on next
[[#3340](#3340)]
- Ignore gitlab merge request events without code changes
[[#3338](#3338)]
- Ignore gitlab push events without commits
[[#3339](#3339)]
- Consider gitlab inherited permissions
[[#3308](#3308)]
- fix: agent panic when node is terminated during step execution
[[#3331](#3331)]

### 📈 Enhancement

- Enable golangci linter gomnd
[[#3171](#3171)]
- Apply "grpcnotrace" go build tag
[[#3448](#3448)]
- Simplify store interfaces
[[#3437](#3437)]
- Deprecate alternative names on secrets
[[#3406](#3406)]
- Store workflows/steps for blocked pipeline
[[#2757](#2757)]
- Parse email from Gitea webhook
[[#3420](#3420)]
- Replace http types on forge interface
[[#3374](#3374)]
- Prevent agent deletion when it's still running tasks
[[#3377](#3377)]
- Refactor internal services
[[#915](#915)]
- Lint for event filter and deprecate `exclude`
[[#3222](#3222)]
- Allow editing all environment variables in pipeline popups
[[#3314](#3314)]
- Parse backend options in backend
[[#3227](#3227)]
- Make agent usable for external backends
[[#3270](#3270)]
- Add no branches text
[[#3312](#3312)]
- Add loading spinner to repo list
[[#3310](#3310)]

### Misc

- Post on mastodon when releasing a new version
[[#3509](#3509)]
- chore(deps): update dependency alpine_3_18/ca-certificates to
v20240226
[[#3501](#3501)]
- fix(deps): update module github.com/google/go-github/v59 to v60
[[#3493](#3493)]
- fix(deps): update dependency @intlify/unplugin-vue-i18n to v3
[[#3492](#3492)]
- chore(deps): update dependency vue-tsc to v2
[[#3491](#3491)]
- chore(deps): update dependency eslint-config-airbnb-typescript to v18
[[#3490](#3490)]
- chore(deps): update web npm deps non-major
[[#3489](#3489)]
- fix(deps): update golang (packages)
[[#3486](#3486)]
- fix(deps): update module google.golang.org/protobuf to v1.33.0
[security]
[[#3487](#3487)]
- chore(deps): update docker.io/techknowlogick/xgo docker tag to
go-1.22.1
[[#3476](#3476)]
- chore(deps): update docker.io/golang docker tag to v1.22.1
[[#3475](#3475)]
- Update prettier version
[[#3471](#3471)]
- chore(deps): update woodpeckerci/plugin-ready-release-go docker tag to
v1.1.0 [[#3464](#3464)]
- chore(deps): lock file maintenance
[[#3465](#3465)]
- chore(deps): update postgres docker tag to v16.2
[[#3461](#3461)]
- chore(deps): update lycheeverse/lychee docker tag to v0.14.3
[[#3429](#3429)]
- fix(deps): update golang (packages)
[[#3430](#3430)]
- More `when` filters
[[#3407](#3407)]
- Apply `documentation`/`ui` label to corresponding renovate updates
[[#3400](#3400)]
- chore(deps): update dependency eslint-plugin-simple-import-sort to v12
[[#3396](#3396)]
- chore(deps): update typescript-eslint monorepo to v7 (major)
[[#3397](#3397)]
- fix(deps): update module github.com/google/go-github/v58 to v59
[[#3398](#3398)]
- chore(deps): update docker.io/techknowlogick/xgo docker tag to
go-1.22.0
[[#3392](#3392)]
- chore(deps): update docker.io/golang docker tag
[[#3391](#3391)]
- fix(deps): update golang (packages)
[[#3393](#3393)]
- chore(deps): update docker.io/woodpeckerci/plugin-docker-buildx docker
tag to v3.1.0
[[#3394](#3394)]
- Add link checking
[[#3371](#3371)]
- Apply `dependencies` label to all PRs
[[#3358](#3358)]
- chore(deps): update docker.io/woodpeckerci/plugin-docker-buildx docker
tag to v3.0.1
[[#3324](#3324)]

---------

Co-authored-by: 6543 <m.huber@kithara.com>
Co-authored-by: Anbraten <6918444+anbraten@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cli feature add new functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants